package com.zhl.Test;

public class TestDemo4 {
    public static void main(String[] args) {
        //目的：案例4：数字加密
        /*
            某系统的数字密码是一个四位数，如1983，为了安全，需要加密后再传输，加密规则是
             对密码中的每位数，都加5再对10求余，最后将所有的数字顺序反转，得到一串加密后的新数，、
             请设计出满足本需求的加密程序！
                eg:         1       9       8       3
                    +5      6       14      13      8
                    %10     6       4       3       8
                    反转     8       3       4      6
                    加密后的结果就是 8346
         */
         int number = 1983;
         String result = encrypt(number);
         System.out.println("加密后的结果是："+result);

    }

    public static String encrypt(int num) {
        //number = 1983;
        //1.把数字拆分成一个一个数字，才可以对其进行加密
        int[] nums = split(num);        //创建一个方法，将数字拆分成一个一个数字
        //nums = [1, 9, 8, 3]

        //2.遍历这个数组中的每个数组，对其进行加密。
        for(int i = 0; i < nums.length; i++){
            nums[i] = (nums[i] + 5) % 10;
        }
        //3.将加密后的数组进行反转    创建一个独立的方法进行反转数组
        int[] newNums = reverse(nums);
        //newNums = [8, 3, 4, 6]
        //4.将加密后的数组转换成字符串
        String result = "";
         for(int i = 0; i < newNums.length; i++){
             result += newNums[i];
         }
        //result = "8346"
         //5.返回加密后的结果
        return result;
    }

    //反转数组
    private static int[] reverse(int[] nums) {
        for(int i = 0,j = nums.length - 1; i < j; i++,j--){
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
        return nums;
    }

    //将数字拆分成一个一个数字
    public static int[] split(int num) {
        //1.把数字转换成字符串
        int[] numbers = new int[4];
        numbers[0] = num / 1000;
        numbers[1] = (num % 1000) / 100;
        numbers[2] = (num % 100) / 10;
        numbers[3] = num % 10;
        //numbers = [1, 9, 8, 3]
        return numbers;
    }

}
